#include <vector>

using namespace std;
class Solution
{
public:
    // 思路： 旋转矩阵可以看作是将矩阵的每一层进行四个方向的交换。
    void rotate(vector<vector<int>> &matrix)
    {
        int left = 0;                  // 左边界
        int right = matrix.size() - 1; // 右边界
        while (left < right)           // 当左边界小于右边界时，继续旋转。可以看做是一层一层地旋转
        {
            for (int i = 0; i < right - left; ++i) // 每一层进行四个方向的交换
            {
                int top = left;                                       // 上边界
                int bottmo = right;                                   // 下边界
                int left_top = matrix[top][left + i];                 // 左上角的元素
                matrix[top][left + i] = matrix[bottmo - i][left];     // 左上角的元素替换为左下角的元素
                matrix[bottmo - i][left] = matrix[bottmo][right - i]; // 左下角的元素替换为右下角的元素
                matrix[bottmo][right - i] = matrix[top + i][right];   // 右下角的元素替换为右上角的元素
                matrix[top + i][right] = left_top;                    // 右上角的元素替换为左上角的元素
            }
            ++left;  // 缩小层数
            --right; // 缩小层数
        }
    }
};